<?php
	// Lớp Fx_Data_Column chuyên dùng để hỗ trợ cho Fx_Grid_Table
	class Fx_Data_Row extends Fx_Data_View
	{
		protected $_index = 0;
		protected $_columnCollection = array();
		protected $_gridView = null;
		
		function __construct($_model = null)
		{
			parent::__construct();
			$this->setModel($_model);
		}

		// Xác định hàng thuộc bảng nào
		public function setDataGridView(Fx_Data_Grid $gridView)
		{
			if ($gridView != null)
			{
				$this->_gridView = & $gridView; 	
			}
			return $this;
		}
		
		// Lấy về Grid View
		public function & getDataGrid()
		{
			$gridView = & $this->_gridView;	
			return $gridView;
		}
		
		// Nạp đè hàm setModel, sau khi setModel, thực hiện
		// thêm cột vào hàng
		public function setModel(&$model = null)
		{
			if ($model != null) {
				$this->_model = & $model;
				foreach ($this->_model->getFieldNames() as $_field)
				{
					$_column = new Fx_Data_Column();
					$this->addColumn($_column->drawDataFromModel($this->_model, $_field));
					$this->setId($model->getId());
				}
				return $this;
			}
		}
		
		// Thiết lập chỉ mục
		public function setIndex($_index = 0)
		{
			if ($_index >= 0)
			{
				$this->_index = $_index;
			}
			return $this;
		}
		
		// Lấy về chỉ mục
		public function getIndex()
		{
			return (int)$this->_index;
		}
		
		// Kiểm tra có tồn tại column hay không
		// param: string hoặc fx_data_column
		public function hasColumn($_column)
		{
			if (is_string($_column)) {
				if (isset($this->_columnCollection[$_column]))
				{
					return true;
				}
				return false;
			} else if ($_column instanceof Fx_Data_Column)
			{
				$_id = $_column->getId();
				if (isset($_id))
				{
					return $this->hasColumn($_id);	
				}
			}
			return false;
		}

		// Thêm cột dữ liệu		
		public function addColumn(Fx_Data_Column $_column)
		{
			if ($_column != null) 
			{
				$_column->setDataRow($this);
				$this->_columnCollection[$_column->getId()] = & $_column;
			}
			return $this;
		}
		
		// Xóa cột dữ liệu theo Index
		public function removeColumn($index)
		{
			if (count($this->_columnCollection) === 0) {
				return null;	
			} 
			if (isset($this->_columnCollection[$index])) 
			{
				unset($this->_columnCollection[$index]);
			}
			return $this;
		}
		
		// Lấy về cột dữ liệu theo Index
		public function & getColumn($index) 
		{
			if (count($this->_columnCollection) === 0) {
				return null;	
			} 
			if (!isset($this->_columnCollection[$index])) {
				return null;	
			} 
			$_column = & $this->_columnCollection[$index];
			return $_column;
		}
		
		// Lấy về tập hợp các cột
		public function & getColumnCollection()
		{
			return $this->_columnCollection;	
		}
		
		// Thiết lập nhanh tập hợp các cột
		public function setColumnCollection(& $_collection)
		{
			$this->_columnCollection = & $_collection;
			return $this;	
		}
		
		// Xóa cột dữ liệu theo Index
		public function removeColumnById($id)
		{
			if (count($this->_columnCollection) === 0) {
				return null;	
			} 
			foreach ($this->_columnCollection as & $_col)
			{
				if ($_col->getId() == $id)
				{
					unset($_col);
					break;
				}
			}
			return $this;
		}
		
		// Lấy về cột dữ liệu theo ID
		public function & getColumnById($id) 
		{
			if (count($this->_columnCollection) === 0) {
				return null;	
			} 
			foreach ($this->_columnCollection as $_col)
			{
				if ($_col->getId() == $id)
				{
					return $_col;	
				}
			}
			return $_column;
		}
		
		// Lấy về dòng nội dung theo định dạng tiêu đề của bảng
		public function getOutputHeader()
		{
			if ($this->isVisible()) 
			{
				$output = "<tr id=\"rowHeaderId_".$this->_id."\" class=\"rowHeader\">\n";
				foreach ($this->_columnCollection as $_column)
				{
					$output .= $_column->getOutputHeader();
				}
				$output .= "</tr>\n";
				return $output;
			}
			return null;
		}
		
		// Lấy về dòng nội dung html
		public function getOutputHtml()
		{
			if ($this->isVisible()) 
			{
				if ($this->_index % 2 == 0) 
				{
					$this->addClass("rowData");
				}
				else
				{
					$this->_classes = array();	
				}
				$output = "<tr id=\"rowId_".$this->_id."\" class=\"rowDataView ".$this->getClassName()."\" onmouseover=\"jQuery(this).toggleClass('hover');\" onmouseout=\"jQuery(this).toggleClass('hover');\">\n";
				foreach ($this->_columnCollection as $_column)
				{
					$output .= $_column->getOutputHtml();
				}
				$output .= "</tr>\n";
				return $output;
			}
			return null;
		}
		
		// Mỗi một row tượng trưng cho một thực thể 
		// Truy cập url của row để truy cập đến thực thể
		public function getRowUrl()
		{
			return base_url() . 'admin.catalog.article_edit.item_'.$this->_id;
		}
	}
	
?>